import { ref } from 'vue'
import { useLoginUserStore } from '@/stores/useLoginUserStore'
import { message } from 'ant-design-vue'

// 全局登录弹窗状态
const globalLoginModalVisible = ref(false)

/**
 * 权限检查和登录相关的composable
 */
export function useAuth() {
  const loginUserStore = useLoginUserStore()

  /**
   * 检查用户是否已登录
   */
  const isLoggedIn = () => {
    const user = loginUserStore.loginUser
    return !!(user && user.id)
  }

  /**
   * 检查用户是否为管理员
   */
  const isAdmin = () => {
    const user = loginUserStore.loginUser
    return !!(user && user.id && user.userRole === 'admin')
  }

  /**
   * 需要登录才能执行的操作
   * @param callback 需要登录后执行的回调函数
   * @param errorMessage 未登录时显示的错误信息
   */
  const requireLogin = (callback: () => void, errorMessage = '请先登录') => {
    if (isLoggedIn()) {
      callback()
    } else {
      message.warning(errorMessage)
      globalLoginModalVisible.value = true
    }
  }

  /**
   * 需要管理员权限才能执行的操作
   * @param callback 需要管理员权限后执行的回调函数
   * @param errorMessage 权限不足时显示的错误信息
   */
  const requireAdmin = (callback: () => void, errorMessage = '需要管理员权限') => {
    if (isAdmin()) {
      callback()
    } else if (isLoggedIn()) {
      message.error(errorMessage)
    } else {
      message.warning('请先登录')
      globalLoginModalVisible.value = true
    }
  }

  /**
   * 显示登录弹窗
   */
  const showLoginModal = () => {
    globalLoginModalVisible.value = true
  }

  /**
   * 隐藏登录弹窗
   */
  const hideLoginModal = () => {
    globalLoginModalVisible.value = false
  }

  return {
    isLoggedIn,
    isAdmin,
    requireLogin,
    requireAdmin,
    showLoginModal,
    hideLoginModal,
    globalLoginModalVisible
  }
}
